//
//  CZStatusViewModel.swift
//  Blog
//
//  Created by whitcast on 16/7/13.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
// 处理微博模型显示的内容，对应的视图是 首页自定义cell
class CZStatusViewModel: NSObject {
    // 在这里面显示内容逻辑......
    
    // 转发数显示内容
    //  转发数显示内容
    var retweetStr: String?
    //  评论数显示内容
    var commentStr: String?
    //  赞数显示内容
    var unlikeStr: String?
    //  处理转发微博内容拼接"@xx:xxxx"
    var retweetContent: String?
    // 会员等级图片
    var mbrandImage: UIImage?
    // 来源内容
    var sourceContent: String?
    // 认证类型等级图片处理
    var verifiedTypeImage: UIImage?
    //  考虑计算属性 - 原因是每次滚动cell的都需要跟我们的当前时间进行对比
    var timeStr:String? {
        // 判断发布微博时间是否为nil
        guard let createAtStr = self.status?.created_at else {
            return nil
        }
        return NSDate.sinaDate(createAtStr).sinaDateString
    }
    
    // 持有微博模型
    var status: CZStatus?
    init(status: CZStatus) {
        super.init()
        // 初始化持有的微博模型
        self.status = status
        
        retweetStr = handleCount(status.reposts_count, defaultTitle: "转发")
        commentStr = handleCount(status.comments_count, defaultTitle: "评论")
        unlikeStr = handleCount(status.attitudes_count, defaultTitle: "赞")
        
        //  处理转发微博内容显示
        handleRetweetContent(status)
        // 处理会员等级图片
        handleMBrankImage(status.user?.mbrank ?? 0)
        // 处理字符串
        handleSourceContent(status.source ?? "")
        // 处理认证类型等级图片
        handleVerifiedTypeImage(status.user?.verified_type ?? 0)
    }
    
//    private func isThisYear(createDate: NSDate) -> Bool {
//        let dt = NSDateFormatter()
//        dt.dateFromString("yyyy")
//        // 指定本地化信息
//        dt.locale = NSLocale(localeIdentifier: "en_US")
//        // 把时间对象转成字符串
//        let createDateYear = dt.stringFromDate(createDate)
//        // 把当前时间对象转成字符串
//        let currentDateYear = dt.stringFromDate(NSDate())
//        return createDateYear == currentDateYear
//    }
//    
    
    // 处理认证类型等级图片
    private func handleVerifiedTypeImage(verifiedType: Int) {
    //  认证类型等级 认证类型 -1 没有认证 ，0 认证用户，2，3，5 企业认证 ， 220 达人
        switch verifiedType {
        case 0:
            // 认证用户
            verifiedTypeImage = UIImage(named: "avatar_vip")
        case 2, 3, 5:
            // 企业认证
            verifiedTypeImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            // 微博达人
            verifiedTypeImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedTypeImage = nil
        }

    }
    // 处理来源字符串
    private func handleSourceContent(source: String) {
        // '\'进行字符串转译
        guard let range1 = source.rangeOfString("</"), let range2 = source.rangeOfString("\">") else {
            return
        }
        // 光标开始的位置
        let startIndex = range1.startIndex
        // 结束光标
        let endIndex = range2.endIndex
        // 截取字符串
        sourceContent = "来自" + source.substringWithRange(endIndex..<startIndex)
    }
    
    
    // 处理会员等级图片
    private func handleMBrankImage(mbrank: Int){
        if mbrank >= 1 && mbrank <= 6 {
            let image = UIImage(named: "common_icon_membership_level\(mbrank)")
            mbrandImage = image
        }
    }
    // 处理转发微博内容显示
    private func handleRetweetContent(status: CZStatus) {
        if status.retweeted_status != nil{
            //  获取转发用户的名字
            guard let name = status.retweeted_status?.user?.screen_name, let text = status.retweeted_status?.text else {
                return
            }
            // 代码执行到此name和转发微博内容一定有值
            retweetContent = "@\(name):\(text)"
        }
    }
    
    //  处理显示 转发, 评论, 赞的数据样式
    private func handleCount(count: Int, defaultTitle: String) ->String{
        if count > 0 {
            if count >= 10000 {
                // 进行格式化处理
                let result = Float(count / 1000) / 10
                
                var resultStr = "\(result)万"
                
                if resultStr.containsString(".0") {
                    resultStr = resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                
                return resultStr
            } else {
                return "\(count)"
            }
        } else {
            return defaultTitle
        }
    }
 
}
